package level03;

import java.io.*;
import java.util.Random;
import java.util.Scanner;

/**
 * 从控制台获取输入的文件目录然后将该目录(包含子目录)下的.java 文件复制到 D:/java 文件
 * 夹中,并统计 java 文件的个数. 提示:如果有相同的名称的文件,如果两个 Test01.java,则拷贝到目标文件夹时只能有一个
 * Test01.java,另一个 Test01.java 要修改为另一个名称:该名称可随机生成,只要不重复即可.
 */
public class Three {
    private static int count;
    private static int str;

    public static void main(String[] args) throws IOException {
        System.out.println("请输入查询问的文件路径");
        //读取文件夹中的java文件
        Scanner scanner = new Scanner(System.in);
        String nextLine = scanner.nextLine();
        File file = new File(nextLine);
        File file1 = new File("D:\\d1");
        java(file, file1);
    }

    static void java(File file, File file1) throws IOException {
        // 获取指定目录下的所有文件和文件夹
        File[] files = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                // 判断文件名是否以.java结尾，或者是否为文件夹
                return pathname.getName().endsWith(".java") || pathname.isDirectory();
            }
        });
        for (File file3 : files) {
            if (file3.isDirectory()) {
                java(file3, file1);
            } else {
                count++;
                //是java文件，先将java的文件名creat到目标文件夹中
                String name = file3.getName();
                //这个操作不会实际创建文件，也不会复制任何内容，它只是在内存中创建一个 “代表目标路径” 的
                // 对象。后续需要通过文件流（如FileInputStream/FileOutputStream
                // ）的读写操作，才能真正将源文件的内容复制到这个路径对应的文件中。
                File file_copy = new File(file1, name);
                //判断文件是否存在
                while (file_copy.exists()) {
                    file_copy = new File(file1, new Random().nextInt(1000) + name);
                    System.out.println("文件名已经存在，随机帮你取一个，本来是"+name+"帮你改成"+file_copy);
                }
                write(file3, file_copy);
            }
        }
    }

    static void write(File file3, File file_copy) throws IOException {
        FileWriter fileWriter = new FileWriter(file_copy);
        FileReader fileReader = new FileReader(file3);
        while ((str = fileReader.read()) != -1) {
            fileWriter.write(str);
        }
        System.out.println("现在是真正的往里面写内容");
        System.out.println("java文件的个数为：" + count);
        fileWriter.close();
        fileWriter.close();
    }
}
